package com.nlx.notes.module.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.nlx.notes.module.bean.dto.accountbook.AccountBookDeleteDTO;
import com.nlx.notes.module.bean.dto.accountbook.AccountBookSaveDTO;
import com.nlx.notes.module.bean.dto.accountbook.AccountBookUpdateDTO;
import com.nlx.notes.module.bean.vo.accountbook.AccountBookVO;
import com.nlx.notes.module.entity.AccountBooks;
import com.nlx.notes.module.entity.Users;

import java.util.List;

/**
 * <p>
 * 账本表 服务类
 * </p>
 *
 * @author nlx
 * @since 2025-11-28
 */
public interface IAccountBooksService extends IService<AccountBooks> {

    /**
     * 查询用户的账本列表
     * @param userId 用户ID
     * @return 账本列表
     */
    List<AccountBookVO> listByUser(Long userId);

    /**
     * 创建账本
     * @param userId 用户ID
     * @param saveDTO 保存DTO
     * @return 账本VO
     */
    AccountBookVO createBook(Long userId, AccountBookSaveDTO saveDTO);

    /**
     * 更新账本
     * @param userId 用户ID
     * @param updateDTO 更新DTO
     * @return 账本VO
     */
    AccountBookVO updateBook(Long userId, AccountBookUpdateDTO updateDTO);

    /**
     * 删除账本
     * @param userId 用户ID
     * @param deleteDTO 删除DTO
     * @return 是否成功
     */
    Boolean deleteBook(Long userId, AccountBookDeleteDTO deleteDTO);

    /**
     * 切换当前账本
     * @param userId 用户ID
     * @param bookId 账本ID
     * @return 账本VO
     */
    AccountBookVO switchBook(Long userId, Long bookId);

    /**
     * 获取当前账本
     * @param userId 用户ID
     * @return 账本VO
     */
    AccountBookVO getCurrentBook(Long userId);


    /**
     * 为新用户创建默认账本
     * @param user 新用户
     */
    void createDefaultAccountBook(Users user);
}
